#ifndef _DIGITAL_IO
#define _DIGITAL_IO
#include <stdio.h>
#include <assert.h>
#include "bool.h"

#define MAX_NUM_OUTPUT_IO 24
#define MAX_BYTE_OUTPUT_IO (MAX_NUM_OUTPUT_IO/8) 
#define MAX_NUM_INPUT_IO 32
#define MAX_BYTE_INPUT_IO (MAX_NUM_INPUT_IO/8) 

// definisce gli stati temporanei
#define MAX_BYTE_OUTPUT_IO_TEMP 3
//Stato temporaneo 0
//#define MOTORE_IDRAULICO      0 //definisce MOTORE IDRAULICO nello stato temporaneo 0
//#define BUZZER                1 //definisce BUZZER nello stato temporaneo 1
//
////definizione dei bit all'interno dello stato 0
//#define MOTORE_IDRAULICO_G    0
//#define MOTORE_IDRAULICO_G1   1
//#define MOTORE_IDRAULICO_T    2
//
//#define BEEP_DOSSO_INCIDENTATA    0
//#define BEEP_BATTERIA_SCARICA     1
//#define BEEP_PINZA                2
//
//
////definizione della maschera dei bit per lo stato 0
//#define MOTORE_IDRAULICO_MASK    0x07
//
////definizione della maschera dei bit per lo stato 1
//#define BUZZER_MASK              0x07
//


extern unsigned char Digital_Input[MAX_BYTE_INPUT_IO];
extern unsigned char Digital_Output[MAX_BYTE_OUTPUT_IO];
extern unsigned char Digital_Output_Temp[MAX_BYTE_OUTPUT_IO_TEMP];

void DO_Init(void);
void DO_Set_Reset(unsigned char state,unsigned char Set_Reset);
void DO_Set(unsigned char state);
void DO_Reset(unsigned char state);
void DO_Set_Temp(unsigned char state,unsigned char Out_Temp);
void DO_Reset_Temp(unsigned char state,unsigned char Out_Temp);
bool DO_Temp_Test(unsigned char state,unsigned char netmask);

void DI_Init(void);
void DI_Reset(void);
bool DI_Test(unsigned char state);


//*************************************************************
//				 definizione Ingressi
//*************************************************************
#define TASTO_START				0
#define TASTO_STOP				1
#define TASTO_RESET				2
#define TASTO_PIU				3
#define TASTO_MENO				4
#define TASTO_ZERO				5
#define RICHIESTA_SCARICO      6			//premuto=1   rilasciato=0
#define FINE_RETE      7					//premuto=1   rilasciato=0
#define TRAMOGGIA_CHIUSA 8					//premuto=1   rilasciato=0
#define TRAMOGGIA_ALIMENTAZIONE_PIENA 9		//premuto=1   rilasciato=0
#define CONTEGGIO_IMPULSI_RUOTA_FONICA 10   //premuto=1   rilasciato=0
#define TACCA_DI_ZERO_RUOTA_FONICA 11		//premuto=1   rilasciato=0
#define OVERLOAD_MAGNETOTERMICO 12			//premuto=1   rilasciato=0
#define CARTER_DI_PROTEZIONE 13				//premuto=1   rilasciato=0
#define RIARMO_POTENZA 14					//premuto=1   rilasciato=0
#define FINECORSA_CLIPSATRICE 15			//premuto=1   rilasciato=0
#define PREMIRETE_CHIUSO_CLIP 16			//premuto=1   rilasciato=0
#define STAMPANTE_PRONTA 17					//premuto=1   rilasciato=0
/*
#define RICHIESTA_SCARICO		6
#define MICRO_FINE_RETE			7
#define TRAMOGGIA_CHIUSA		8
#define FOTO_TRAMOGGIA_ALIM		9
#define PROX_CONT_IMPULSI_RUOTA 10
#define PROX_TACCA_ZERO_RUOTA	11
#define OVERLOAD_MAGNETOTERMICO 12
#define CARTER_PROTEZIONE_APERTO 13
#define RIARMO_POTENZA			14
#define PROX_CICLO_CLIPSATRICE	15
#define PREMIRETE_CHIUSO    	16
#define STAMPANTE_PRONTA		17
*/
//*************************************************************
//					definizione Uscite
//*************************************************************
#define ELETTROMAGN_CHIUSURA_TRAMOG			3
#define RICHIESTA_MACCHINA_MONTE			4
#define START_CONFEZIONATRICE				5
#define LAMPADA_ROSSA_EMERG					6
#define LAMPADA_GIALLA_STOP					7
#define LAMPADA_VERDE_AUTOMATICO			8
#define SIRENA								9
#define VALVOLA_RETROMARCIA_COCLEA			10
#define VALVOLA_CLIPSATRICE					11
#define VALVOLA_RETROMARCIA_CLIPSATRICE		12
#define RELE_RICHIESTA_ETICHETTA			13
#define BUZZER                              14
#define LED_TASTO_START						15
#define LED_TASTO_STOP						16
#define LED_TASTO_RESET						17
#define LED_TASTO_PIU						18
#define LED_TASTO_MENO						19
#define LED_TASTO_ZERO						20


//*************************************************************
//                  MACRO INGRESSI
//*************************************************************
/*
#define Tasto_Start()				DI_Test(TASTO_START)
#define Tasto_Stop()				DI_Test(TASTO_STOP)
#define Tasto_Reset()				DI_Test(TASTO_RESET)
#define Tasto_Piu()					DI_Test(TASTO_PIU)
#define Tasto_Meno()				DI_Test(TASTO_MENO)
#define Tasto_Zero()				DI_Test(TASTO_ZERO)
#define Richiesta_Scarico()			DI_Test(RICHIESTA_SCARICO)
#define Micro_Fine_Rete()			DI_Test(MICRO_FINE_RETE)
#define Tramoggia_Chiusa()			DI_Test(TRAMOGGIA_CHIUSA)
#define Foto_Tramoggia_Alim()		DI_Test(FOTO_TRAMOGGIA_ALIM)
#define Prox_Cont_Impulsi_Ruota()	DI_Test(PROX_CONT_IMPULSI_RUOTA)
#define Prox_Tacca_Zero_Ruota()		DI_Test(PROX_TACCA_ZERO_RUOTA)
#define Overload_Magnetotermico()	DI_Test(OVERLOAD_MAGNETOTERMICO)
#define Carter_Protezione_Aperto()	DI_Test(CARTER_PROTEZIONE_APERTO)
#define Riarmo_Potenza()			DI_Test(RIARMO_POTENZA)
#define Prox_Ciclo_Clipsatrice()	DI_Test(PROX_CICLO_CLIPSATRICE)
#define Prox_Fine_Punti()			DI_Test(PROX_FINE_PUNTI)
#define Stampante_Pronta()			DI_Test(STAMPANTE_PRONTA)
*/

//*************************************************************
//                  MACRO USCITE
//*************************************************************
/*
#define Set_Led_Tasto_Start()					DO_Set(LED_TASTO_START)
#define Set_Led_Tasto_Stop()					DO_Set(LED_TASTO_STOP)
#define Set_Led_Tasto_Reset()					DO_Set(LED_TASTO_RESET)
#define Set_Led_Tasto_Piu()						DO_Set(LED_TASTO_PIU)
#define Set_Led_Tasto_Meno()					DO_Set(LED_TASTO_MENO)
#define Set_Led_Tasto_Zero()					DO_Set(LED_TASTO_ZERO)
#define Reset_Led_Tasto_Start()					DO_Reset(LED_TASTO_START)
#define Reset_Led_Tasto_Stop()					DO_Reset(LED_TASTO_STOP)
#define Reset_Led_Tasto_Reset()					DO_Reset(LED_TASTO_RESET)
#define Reset_Led_Tasto_Piu()					DO_Reset(LED_TASTO_PIU)
#define Reset_Led_Tasto_Meno()					DO_Reset(LED_TASTO_MENO)
#define Reset_Led_Tasto_Zero()					DO_Reset(LED_TASTO_ZERO)
#define Set_Elettromagn_Chiusura_Tramog()		DO_Set(ELETTROMAGN_CHIUSURA_TRAMOG)
#define Set_Richiesta_Macchina_Monte()			DO_Set(RICHIESTA_MACCHINA_MONTE)
#define Set_Start_Confezionatrice()				DO_Set(START_CONFEZIONATRICE)
#define Set_Lampada_Rossa_Emerg()				DO_Set(LAMPADA_ROSSA_EMERG)
#define Set_Lampada_Gialla_Stop()				DO_Set(LAMPADA_GIALLA_STOP)
#define Set_Lampada_Verde_Automatico()			DO_Set(LAMPADA_VERDE_AUTOMATICO)
#define Set_Sirena()							DO_Set(SIRENA)
#define Set_Valvola_Retromarcia_Coclea()		DO_Set(VALVOLA_RETROMARCIA_COCLEA)
#define Set_Valvola_Clipsatrice()				DO_Set(VALVOLA_CLIPSATRICE)
#define Set_Valvola_Retromarcia_Clipsatrice()	DO_Set(VALVOLA_RETROMARCIA_CLIPSATRICE)
#define Set_Rele_Richiesta_Etichetta()			DO_Set(RELE_RICHIESTA_ETICHETTA)
#define Reset_Elettromagn_Chiusura_Tramog()		DO_Reset(ELETTROMAGN_CHIUSURA_TRAMOG)
#define Reset_Richiesta_Macchina_Monte()		DO_Reset(RICHIESTA_MACCHINA_MONTE)
#define Reset_Start_Confezionatrice()			DO_Reset(START_CONFEZIONATRICE)
#define Reset_Lampada_Rossa_Emerg()				DO_Reset(LAMPADA_ROSSA_EMERG)
#define Reset_Lampada_Gialla_Stop()				DO_Reset(LAMPADA_GIALLA_STOP)
#define Reset_Lampada_Verde_Automatico()		DO_Reset(LAMPADA_VERDE_AUTOMATICO)
#define Reset_Sirena()							DO_Reset(SIRENA)
#define Reset_Valvola_Retromarcia_Coclea()		DO_Reset(VALVOLA_RETROMARCIA_COCLEA)
#define Reset_Valvola_Clipsatrice()				DO_Reset(VALVOLA_CLIPSATRICE)
#define Reset_Valvola_Retromarcia_Clipsatrice() DO_Reset(VALVOLA_RETROMARCIA_CLIPSATRICE)
#define Reset_Rele_Richiesta_Etichetta()		DO_Reset(RELE_RICHIESTA_ETICHETTA)
*/

//**********************************************************************
//						  Set_Led_Tasto_Start
//**********************************************************************
void Set_Led_Tasto_Start(void);		

//**********************************************************************
//						  Set_Led_Tasto_Stop
//**********************************************************************			
void Set_Led_Tasto_Stop(void);

//**********************************************************************
//						  Set_Led_Tasto_Reset
//**********************************************************************					
void Set_Led_Tasto_Reset(void);		

//**********************************************************************
//						  Set_Led_Tasto_Piu
//**********************************************************************			
void Set_Led_Tasto_Piu(void);	

//**********************************************************************
//						  Set_Led_Tasto_Meno
//**********************************************************************					
void Set_Led_Tasto_Meno(void);					

//**********************************************************************
//						  Set_Led_Tasto_Zero
//**********************************************************************
void Set_Led_Tasto_Zero(void);					

//**********************************************************************
//						  Reset_Led_Tasto_Start
//**********************************************************************
void Reset_Led_Tasto_Start(void);					

//**********************************************************************
//						  Reset_Led_Tasto_Stop
//**********************************************************************
void Reset_Led_Tasto_Stop(void);					

//**********************************************************************
//						  Reset_Led_Tasto_Reset
//**********************************************************************
void Reset_Led_Tasto_Reset(void);					

//**********************************************************************
//						  Reset_Led_Tasto_Piu
//**********************************************************************
void Reset_Led_Tasto_Piu(void);					

//**********************************************************************
//						  Reset_Led_Tasto_Meno
//**********************************************************************
void Reset_Led_Tasto_Meno(void);					

//**********************************************************************
//						  Reset_Led_Tasto_Zero
//**********************************************************************
void Reset_Led_Tasto_Zero(void);					

//**********************************************************************
//						  Set_Elettromagn_Chiusura_Tramog
//**********************************************************************
void Set_Elettromagn_Chiusura_Tramog(void);		

//**********************************************************************
//						  Set_Richiesta_Macchina_Monte
//**********************************************************************
void Set_Richiesta_Macchina_Monte(void);			

//**********************************************************************
//						  Set_Start_Confezionatrice
//**********************************************************************
void Set_Start_Confezionatrice(void);				

//**********************************************************************
//						  Set_Lampada_Rossa_Emerg
//**********************************************************************
void Set_Lampada_Rossa_Emerg(void);				

//**********************************************************************
//						  Set_Lampada_Gialla_Stop
//**********************************************************************
void Set_Lampada_Gialla_Stop(void);				

//**********************************************************************
//						  Set_Lampada_Verde_Automatico
//**********************************************************************
void Set_Lampada_Verde_Automatico(void);			

//**********************************************************************
//						  Set_Sirena
//**********************************************************************
void Set_Sirena(void);							

//**********************************************************************
//						  Set_Valvola_Retromarcia_Coclea
//**********************************************************************
void Set_Valvola_Retromarcia_Coclea(void);		

//**********************************************************************
//						  Set_Valvola_Clipsatrice
//**********************************************************************
void Set_Valvola_Clipsatrice(void);				

//**********************************************************************
//						  Set_Valvola_Retromarcia_Clipsatrice
//**********************************************************************
void Set_Valvola_Retromarcia_Clipsatrice(void);

//**********************************************************************
//						  Set_Rele_Richiesta_Etichetta
//**********************************************************************
void Set_Rele_Richiesta_Etichetta(void);		

//**********************************************************************
//						  Set_Buzzer
//**********************************************************************
void Set_Buzzer(void);



//**********************************************************************
//						  Reset_Elettromagn_Chiusura_Tramog
//**********************************************************************
void Reset_Elettromagn_Chiusura_Tramog(void);		

//**********************************************************************
//						  Reset_Richiesta_Macchina_Monte
//**********************************************************************
void Reset_Richiesta_Macchina_Monte(void);		

//**********************************************************************
//						  Reset_Start_Confezionatrice
//**********************************************************************
void Reset_Start_Confezionatrice(void);			

//**********************************************************************
//						  Reset_Lampada_Rossa_Emerg
//**********************************************************************
void Reset_Lampada_Rossa_Emerg(void);				

//**********************************************************************
//						  Reset_Lampada_Gialla_Stop
//**********************************************************************
void Reset_Lampada_Gialla_Stop(void);				

//**********************************************************************
//						  Reset_Lampada_Verde_Automatico
//**********************************************************************
void Reset_Lampada_Verde_Automatico(void);		

//**********************************************************************
//						  Reset_Sirena
//**********************************************************************
void Reset_Sirena(void);							

//**********************************************************************
//						  Reset_Valvola_Retromarcia_Coclea
//**********************************************************************
void Reset_Valvola_Retromarcia_Coclea(void);		

//**********************************************************************
//						  Reset_Valvola_Clipsatrice
//**********************************************************************
void Reset_Valvola_Clipsatrice(void);				

//**********************************************************************
//						  Reset_Valvola_Retromarcia_Clipsatrice
//**********************************************************************
void Reset_Valvola_Retromarcia_Clipsatrice(void); 

//**********************************************************************
//						  Reset_Rele_Richiesta_Etichetta
//**********************************************************************
void Reset_Rele_Richiesta_Etichetta(void);

//**********************************************************************
//						  Reset_Buzzer
//**********************************************************************
void Reset_Buzzer(void);

#endif
